chore(release): merge release/v1.2.0 into main for 1.2.0 - #248
Merged
Conversation
…ival fix (#241) First PR of #238. Adds the universal correction surface for a mod container's import details, the derived version-unknown row state it resolves, and fixes #240. ## Edit import details - `IModRepository.EditImportDetails`: one manifest-level primitive for editing a container's name, source association, and release tag. Enforces the grounding rules at the data layer: a container is download-grounded when any version carries a FileId or a RemoteUploadedAt (the timestamp covers mods downloaded before FileId persistence existed), and a grounded container refuses every edit, including name-only. The mod id lock, the duplicate-identity guard, the tag-collision guard, and the explicit `removeOlderVersions` confirm flag (typed `RemovalConfirmationRequiredException` for programmatic recovery) all live here. - The edit surface is the import card's edit mode, rendered as an in-row band on the edited row (batch imports keep the top card). Same fields and shared `ImportSourceValidator` as the per-item import form; policy picker hidden; Save applies the primitive; a multi-version identity change swaps to an inline removal confirm. The band targets the container id, re-attaches across mid-edit reloads, anchors the editing row against reorder (grip, move buttons, drag), auto-closes when a download morphs the row, and scrolls into view on open. - Name editing is Untracked-only (a Nexus mod's name comes from Nexus; the name-sync owns it) and renders read-only rather than disabled so the name stays legible. - Entry: a pencil action in the shared row action strip between the source badge and the Enabled checkbox, hidden with its layout slot reserved on non-editable rows (linked, download-morphed, downloaded). ## Version-unknown state - "Nexus, version unknown" is a derived state (a NexusSource container whose resolved latest version carries an empty tag; no storage change). The update action enables with unknown-specific tooltips, Premium clicks enqueue a resolution install with an empty expected version that passes the queue's dequeue-time revalidation, the updates-only filter keeps unknown rows, the pin dropdown suppresses, and the automatic-update batch excludes them (manual click only). ## Latest-arrival fix (fixes #240) - `WithLatestMarked` ranks IsLatest by the most recent arrival: a manual import (no remote facts) as the newest arrival is latest; otherwise the newest downloaded version by remote publish date wins. A download arriving over a manually imported container now correctly takes over, while a deliberate old-file download still cannot displace a newer one. - The startup prune additionally keeps each referenced container's current-latest version folder, so a downloaded update is no longer reclaimed as unreferenced on the next restart (also covers pinned entries, whose newest version was previously prunable). ## Supporting changes - The mod-list toolbar (search, filter toggles, density selector, check-now) disables while the import card is active in either mode, so the row being edited can never be filtered out from under its open band. Row-level controls stay live. - Docs updated throughout (AGENTS.md, docs/reference/mods.md, ui.md, profiles.md, architecture notes). - Full suite green at 2284 tests (Mods 225, UI 1108 among others).
## Summary - Parse compatible line-format mod lists and reconcile their entries against the active profile and Curator library. - Add focused reorder-only and reorder-and-import workflows with virtualized review, known mod facts, sibling-folder imports, Nexus identification, capability gating, and explicit skip controls. - Apply membership before ordering, route Premium acquisitions through the shared download queue, and converge completed downloads to their source-list positions. - Match Nexus website search behavior with one anonymous v2 request, exact ID verification, safe GraphQL escaping, and explicit candidate acceptance. - Add responsive, localized, and accessible review surfaces plus comprehensive planner, workflow, search, placement, and XAML coverage. - Isolate the Linux NXM unregister test from the real managed handler directory. - Update architecture orientation and library reference documentation for the shipped contracts. ## Validation - `dotnet build src/modificus-curator.sln --configuration Release` (0 warnings) - `dotnet test src/modificus-curator.sln --configuration Release` (2,443 passed) - `dotnet format src/modificus-curator.sln --verify-no-changes` - `git diff --check origin/release/v1.2.0...HEAD` Closes #238
## Summary - display Detailed-row Nexus thumbnails in responsive 16:9 frames - fit complete source images and increase decode sizing for 2x displays - add regression coverage and synchronize the UI architecture and reference docs ## Validation - `dotnet build src/modificus-curator.sln --configuration Release` - `dotnet test src/modificus-curator.sln --configuration Release` (2,445 passed) - `dotnet format src/modificus-curator.sln --verify-no-changes` - operator visual verification Fixes #243
## Summary - add a Clone profile action for the active persisted profile, with immediate activation, existing unsaved-change resolution, and the Darktide-running gate - copy the complete persisted profile through a focused `IProfileCloner`, using stable numbered copy families while keeping repository mod files shared and the new staged tree empty - preserve intentional DMF-free setups by keeping clones out of the blank-profile creation prompt - add backend, UI, DI, localization, naming, and XAML coverage and synchronize current-system documentation ## Validation - `dotnet build src/modificus-curator.sln --configuration Release` (0 warnings, 0 errors) - `dotnet test src/modificus-curator.sln --configuration Release` (2,471 passed) - `dotnet format src/modificus-curator.sln --verify-no-changes` - `git diff --check release/v1.2.0...HEAD` - independent code review approved - independent QA passed - operator live verification Closes #245
## Summary - use Nexus relevance ordering so older exact-title mods are not excluded by capped newest-first results - rank normalized exact matches ahead of non-exact candidates for automatic and manual load-order searches while preserving the existing selection safeguards - add Scoreboard mod 22 regression coverage and update the Nexus and UI references ## Validation - `dotnet build src/modificus-curator.sln --configuration Release` - `dotnet test src/modificus-curator.sln --configuration Release` (2,474 passed) - `dotnet format src/modificus-curator.sln --verify-no-changes` - independent code review approved and QA passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Issues addressed
Additional changes